STM32 6根线SWD的接法 您所在的位置:网站首页 gd32 swd接法 STM32 6根线SWD的接法

STM32 6根线SWD的接法

#STM32 6根线SWD的接法| 来源: 网络整理| 查看: 265

前言

最初改STM32F407板子的时候,因为同事没引出SWO线,导致不能用ITM,调试很不方便。 改了一个临时板子,因为没做验证实验,居然将SWD线引出错了,导致板子废了。 这次,找到一个引脚都引出的开发板(STM32F407ZG(144管脚)),用杜邦线验证了6线SWD的接法,单步调试和打印ITM都正常。

试验

从JLINK仿真器出口接了一块转接板,在6线接口处用杜邦线直接和板子上引出管脚连接。

转接板上6针插座的管脚定义

备注:如果不是自己做的转接座,要注意核对调试插座的6个引脚定义,是否和下面的定义相同。 从x宝上上买了多次JLINK转接座,刚才要调试一个新打样的板子,因为调试用的东西丢公司了,从家里屯的JLINK转接座随便抓起一个,居然和我当时做下面实验的转接座不一样,坑货…

我这次打样的板子,调试接口的定义的6pin插座和下面的转接座相同,准备直接用6pin排线插座(两端都是母座,一边插入JLINK转接座上的6pin插座,一边插入板子的6pin插针),这要是没核对,这次惨了。

调试插座如果插反了(VREF, GND反了),板子一定烧了,相当于将电源和地短路了。前一段时间,因为插错调试接口方向, 就将焊接了一下午的打样板子都烧了。 有的调试转接座,VREF, GND在一边,还好些。像VREF,GND对称布置在6pin插座两边的,可要小心。

要不自己做个JLINK转接板,和x宝上卖的JLINK转接座长的不一样,自己每次调试,都用自己的转接座,这样也不会弄错。 在这里插入图片描述 VREF : 接板子上的参考电压(3.3V), 这个参考电压,就是板子上MCU用的3.3V电源网络。 SWDIO : SWD接口的输入数据线(从JLINK到板子) SWCLK : SWD接口的时钟线 SWO : SWD接口的输出线(从板子到JLINK) NRST : 接板子上MCU的复位引脚 GND : 和板子的数字地相连。

转接板和MCU板的6线连接线序

转接板 => MCU板 VREF(转接板6线插座_1脚, 红色线) => 随便在板子上找个3.3V引出管脚 SWDIO(转接板6线插座_2脚, 绿色线) => MCU_PA13 SWCLK(转接板6线插座_3脚, 蓝色线) => MCU_PA14 SWO(转接板6线插座_4脚, 黄色线) => MCU_PB3 NRST(转接板6线插座_5脚, 橙色线) => MCU_NRST no.25脚,因为这个管脚没引出,就接在JTAG插座的no.15脚 GND (转接板6线插座_6脚, 锗色线)=> 随便在板子上找个GND引出管脚

连接完的接线图

在这里插入图片描述

6根线SWD原理图

在这里插入图片描述

设置ITM

顶级菜单 => Project => Options for Target ‘xx’ … => Debug => Settings 在这里插入图片描述 在这里插入图片描述 作2个ITM封装的文件,加入工程

// @file \BSP\itm\my_ITM.h #ifndef __MY_ITM_H__ #define __MY_ITM_H__ #define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n))) #define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n))) #define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n))) #define DEMCR (*((volatile unsigned long *)(0xE000EDFC))) #define TRCENA 0x01000000 struct __FILE { int handle; /* Add whatever you need here */ }; #endif // #ifndef __MY_ITM_H__ // @file \BSP\itm\my_ITM.c #include "my_ITM.h" #include #pragma import(__use_no_semihosting) FILE __stdout; FILE __stdin; void _sys_exit(int x) { x = x; } int fputc(int ch, FILE *f) { if (DEMCR & TRCENA) { while (ITM_Port32(0) == 0) { }; ITM_Port8(0) = ch; } return(ch); } 测试ITM

多拉出一根SWO, 就是想全速调试时,看ITM的printf输出.

编译工程时, 为了防止编译问题,需要全部编译工程才靠谱. 在这里插入图片描述 在实现中加入printf打印语句 在调试时,在程序入口处断住时,打开printf查看窗口 顶级菜单 => View => Serial Windows => Debug(printf) Viewer 当程序全速跑起来时,在printf查看窗口,就能看到printf打印的内容了 在这里插入图片描述 如果现场出了问题,可以让现场同事,接上JLINK,用C:\Program Files (x86)\SEGGER\JLink\JLinkSWOViewer.exe 就能看到调试信息,不需要给他工程。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有